/**
 * 事件总线通讯基类, 使用单例的Context进行通信
 * 模块间需要通信的类 model, controller 都是他的子类
 */
class Actor {
    private context: Context = Context.getInstance();

    public constructor() {
    }

    public get stage(): egret.Stage {
        return this.context.stage;
    }

    public get root(): eui.UILayer {
        return this.context.root;
    }
    
    public get commonViewManager(){
        return this.context.commonViewManager;
    }
    
    //=====================事件总线实现=======================
    /**
     * 添加命令监听
     * @param type 命令类型字符串
     * @param listener 回调函数
     * @param scope 函数域
     */
    public addCommand(type: string,listener: Function,scope: any): void {
        this.context.addEventListener(type,listener,scope);
    }

    /**
     * 移除命令监听
     * @param type 命令类型字符串
     * @param listener 回调函数
     * @param scope 函数域
     */
    public removeCommand(type: string,listener: Function,scope: any): void {
        this.context.removeEventListener(type,listener,scope);
    }

    /**
     * 总线上是否添加过指定命令类型的监听
     * @param type 命令类型字符串
     */
    public hasCommand(type: string): boolean {
        return this.context.hasEventListener(type);
    }
    /**
     * 抛出一个命令
     * @param command 要抛出的命令
     * @param data
     * @param bubbles
     */
    public dispatch(command: string,data: any = null,bubbles: boolean = false): boolean {
        return this.context.dispatchEventWith(command,bubbles,data);
    }
    /**
     * send一个包含数据的事件
     */ 
    public dispatchEvent(event:egret.Event) : boolean{
        return this.context.dispatchEvent(event);
    }



}
